#ifndef EXPLOIT_H
#define EXPLOIT_H

#include <inttypes.h>
#include <string>
#include <list>


namespace software { namespace exploit {

struct Exploit
{
    int64_t                 exploit_id;
    std::string             exploit_file_path;
    std::string             exploit_software;
    std::list<std::string>  exploit_versions;
    std::string             exploit_description;
    std::string             exploit_date;
    std::string             exploit_author;
    std::string             exploit_type;
    std::string             exploit_platform;
    std::string             exploit_port;
    std::string             exploit_cve_id;
};

// cve数据库表的结构
enum EExploitsFlags
{
    EN_EXPLOIT_ID = 0,
    EN_EXPLOIT_FILE = 1,
    EN_EXPLOIT_DESCRIPTION = 2,
    EN_EXPLOIT_DATE = 3,
    EN_EXPLOIT_AUTHOR = 4,
    EN_EXPLOIT_TYPE = 5,
    EN_EXPLOIT_PLATFORM = 6,
    EN_EXPLOIT_CVE_ID = 7,
};

/**
 * @brief load_exploits 加载漏洞信息库
 * @param cve_repo_path 漏洞信息库路径，当前是针对逗号分割的csv文件进行解析的
 * @return 漏洞信息列表
 */
std::list<Exploit> load_exploits(const char *cve_repo_path);

/**
 * @brief match_cve 匹配cve数据库列表
 * @param seftware 软件名称
 * @param version 软件版本
 * @param cve_list cve数据库列表
 * @param report 命中的cve信息列表
 * @return true: 表示命中cve信息; false：表示未命中cve信息
 */
bool search_exploit(
        const char *seftware, const char *version,
        const std::list<Exploit> &cve_list, std::list<Exploit> &report
        );


}}

#endif // EXPLOIT_H
